漏洞修復得越早,修復成本就越低。靜態應用程式安全測試(Static Application Security Testing, SAST)扮演著第一道自動化關卡,在程式碼完全不需編譯執行、環境尚未建置前,直接對原始碼檔案進行剖析。
SAST 並非單純的關鍵字文字比對,而是結合編譯器前端技術對程式結構進行結構化分析:
揪出潛伏的「定時炸彈」
| 特性 | 詳細說明 |
|---|---|
| 何時該用它 | 越早越好,佈署在 SDLC 的極早期階段 (開發人員的 IDE 內、commit hooks 攔截器、CI/CD 管線中)。 |
| 它能抓到什麼 | 緩衝區溢位、常見的語法級注入缺陷、原始碼中寫死的機密 (hardcoded credentials)、不安全的加密函式呼叫。 |
| 優點 Pros | 能精準指出有問題的「檔案與行號位置」;能在程式碼被編譯/部署之前就揪出問題;具備極高的擴展性。 |
| 缺點 Cons | 誤報率極高;無法抓出因執行環境設置不當所引發的問題,也抓不到複雜的邏輯缺陷;深度綁定並受限於特定的程式語言。 |
| 特性 | 詳細說明 |
|---|---|
| 何時該用它 | 佈署在 SDLC 的較晚期階段 (測試/QA、Staging 測試環境、Pre-production 預備上線環境)。前提條件是應用程式「必須先跑起來」。 |
| 它能抓到什麼 | 身分驗證繞過、伺服器組態設定不當、XSS、(透過觀察系統吐錯的回應來判斷的) 注入攻擊。 |
| 優點 Pros | 誤報率較低 (只要它抓到的,通常都是真的能打穿的漏洞);與程式語言無關;能抓出環境/執行時期的組態問題。 |
| 缺點 Cons | 無法告訴你到底是哪一行程式碼寫錯了;需要一個穩定且執行中的環境;測試的涵蓋率 (test coverage) 完全取決於它背後那隻網路爬蟲/腳本夠不夠聰明。 |
| 特性 | 詳細說明 |
|---|---|
| 何時該用它 | 通常佈署在測試/QA 階段 (這時通常會搭配自動化功能測試一起跑)。 |
| 它是如何運作的 | 會有一個代理程式 (agent) 潛伏在應用程式內部,當外部的測試腳本 (或是 DAST 工具) 在狂打這支 App 時,代理程式負責在內部同步監控記憶體、流量與程式碼執行流向。 |
| 優點 Pros | 準確率極高 (誤報極低);能精準指出有問題的程式行號;能抓出執行時期的缺陷。 |
| 缺點 Cons | 需要特定的語言/框架支援 (不是什麼語言都能掛 agent);可能會拖慢應用程式的執行效能;極度依賴要有夠好的功能測試涵蓋率 (有跑到的路徑才測得到)。 |
OWASP Security Culture
https://owasp.github.io/www-project-security-culture/v10/7-Security_Testing/